module Data.Parser.Expires
  ( parseExpirationTime,
  )
where

import Control.Monad.Except
import Data.Text.Conversions
import Data.Time.Clock
import Data.Time.Format (defaultTimeLocale, parseTimeM)
import Hasura.Prelude

-- | Extracts an absolute expiration time from a Expires header.
parseExpirationTime :: MonadError String m => Text -> m UTCTime
parseExpirationTime =
  fromText
    >>> parseTimeM True defaultTimeLocale "%a, %d %b %Y %T GMT"
    >>> (`onNothing` throwError "Value of Expires header is not a valid timestamp")
